package br.com.pb.bymychef.persistencia.bean;

import java.io.Serializable;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.xml.bind.annotation.XmlRootElement;

@Entity
@Table(name="tb_modpreparo")
@SequenceGenerator(name = "S_TB_MODPREPARO", sequenceName = "S_TB_MODPREPARO", initialValue = 0, allocationSize = 1)
@XmlRootElement
public class ModoPreparo implements Serializable {
    
    private static final long serialVersionUID = 1L;
   
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "S_TB_MODPREPARO")
    @Column(name="idModPreparo")
    private Long idModoPreparo;
    @ManyToOne(fetch=FetchType.LAZY, optional=false)
    @JoinColumn(table = "tb_modpreparo", name="idReceita")
    private Receita receita;
    @OneToOne(mappedBy="modoDePreparo", fetch=FetchType.LAZY, optional=true, cascade=CascadeType.ALL)
    private ImagemModoPreparo imagemModoPreparo;
    @Column(name="ordenacao", nullable=false)
    private Integer ordenacao;
    @Column(name="descricao", length=255, nullable=false)
    private String descricao;
    
    public ModoPreparo() {
	super();
    }
    
    public ModoPreparo(Receita receita, ImagemModoPreparo imagemModoPreparo,
	    Integer ordenacao, String descricao) {
	super();
	this.receita = receita;
	this.imagemModoPreparo = imagemModoPreparo;
	this.ordenacao = ordenacao;
	this.descricao = descricao;
    }

    public Long getIdModoPreparo() {
        return idModoPreparo;
    }
    
    public Integer getOrdenacao() {
        return ordenacao;
    }
    
    public void setOrdenacao(Integer ordenacao) {
        this.ordenacao = ordenacao;
    }
    
    public Receita getReceita() {
        return receita;
    }

    public void setReceita(Receita receita) {
        this.receita = receita;
    }

    public ImagemModoPreparo getImagemModoPreparo() {
        return imagemModoPreparo;
    }

    public void setImagemModoPreparo(ImagemModoPreparo imagemModoPreparo) {
        this.imagemModoPreparo = imagemModoPreparo;
    }

    public String getDescricao() {
        return descricao;
    }

    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }

    @Override
    public int hashCode() {
	final int prime = 31;
	int result = 1;
	result = prime * result
		+ ((idModoPreparo == null) ? 0 : idModoPreparo.hashCode());
	return result;
    }
    
    @Override
    public boolean equals(Object obj) {
	if (this == obj)
	    return true;
	if (obj == null)
	    return false;
	if (getClass() != obj.getClass())
	    return false;
	ModoPreparo other = (ModoPreparo) obj;
	if (idModoPreparo == null) {
	    if (other.idModoPreparo != null)
		return false;
	} else if (!idModoPreparo.equals(other.idModoPreparo))
	    return false;
	return true;
    }
    
}
